package com.authorization.storage;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.GrantedAuthority;

import java.util.Collection;

/**
 * 如果将用户的权限列表也一并存储token，会对性能造成严重影响，
 * 所以token中只含有少量的用户信息，不包含权限列表，
 * 权限列表存储在本接口的实现中，
 * 以此减轻解析token令牌对性能造成的影响
 * @param <T>
 */
public interface AuthorityStorageManager<T extends GrantedAuthority> {

    /**
     * 存储已认证授权信息
     * @param authentication
     */
    void storage(Authentication authentication);

    /**
     * 根据认证信息加载其授权信息
     * @param authentication
     * @return
     */
    Collection<T> load(Authentication authentication);
}
